package com.sicheng.lc.lc笔试.腾讯篇;

import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/4/25 21:14
 */
public class 差距最小分组 {
    /**
     * 3.战士分组
     * 输入n及01字符串，0表示战士只会进攻，1表示战士只会防守。战士的战斗力为下标（1~n）。
     * 从中间分成两组，让左边组的攻击战士战斗力之和与右边组的防守战士战斗力之和尽可能接近，求战斗力差值。
     * <p>
     * 例
     * <p>
     * 作者：WASoul-WAker
     * 链接：https://leetcode-cn.com/circle/discuss/JwMjS8/view/mXLSyh/
     * 来源：力扣（LeetCode）
     * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        int n = line.length();
        int left = 0;
        int right = n - 1;
        int pre0 = 0, pre1 = 0;
        int[] nums0 = new int[n];
        int[] nums1 = new int[n];
        for (int i = 0; i < n; i++) {
            if (line.charAt(i) == '0') {
                pre0 += i + 1;
                nums0[i] = pre0;
            }
            if (line.charAt(n - i - 1) == '1') {
                pre1 += n - i;
                nums1[n - i - 1] = pre1;
            }
        }

        int min = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            min = Math.min(min, Math.abs(nums0[i] - nums1[i]));
        }

        System.out.println(min);

    }

}
